package pers.mine.service.inter;

import pers.mine.dto.QueryHandler;
import pers.mine.po.GoodsItem;
import pers.mine.po.GoodsItemExample;
import pers.mine.vo.PageInfo;

/**
 * @author Mine
 * @since 2016年10月20日_下午2:47:54
 */
public interface GoodsItemService {
	/**
	 * 上架新商品服务
	 * 
	 * @param gi
	 *            商品项(库存为0,id不需要指定)
	 * @return 操作结果
	 */
	public boolean addGoods(GoodsItem gi);

	/**
	 * 修改商品基本信息服务
	 * 
	 * @param gi
	 *            商品项(不包括图片)
	 * @return 操作结果
	 */
	public boolean editGoodsInfo(GoodsItem gi);

	/**
	 * 修改商品图片服务
	 * 
	 * @param gid
	 *            商品id
	 * @param img
	 *            新图片名
	 * @return 操作结果
	 */
	public boolean editGoodsIMG(Integer gid, String img);

	/**
	 * 设置商品库存信息服务(仅库存)
	 * 
	 * @param gid
	 *            商品id
	 * @param num
	 *            要更新库存数
	 * @return
	 */
	public boolean setGoodsInventory(Integer gid, Integer num);

	/**
	 * 修改商品库存信息服务(仅库存),传入要减去的差值
	 * 
	 * @param gid
	 *            商品id
	 * @param differenceNum
	 *            要减去的差值
	 * @return
	 */
	public boolean setGoodsInventoryByDifference(Integer gid,
			Integer differenceNum);

	/**
	 * 修改商品状态比如下架商品(也可以直接通过修改商品信息实现)
	 * 
	 * @param gid
	 *            商品id
	 * @param state
	 *            状态码
	 * @return 操作结果
	 */
	public boolean setGoodsShelveState(Integer gid, Integer state);

	/**
	 * 获取指定id商品信息
	 * 
	 * @param gid
	 *            商品id
	 * @return 商品项
	 */
	public GoodsItem getOneGoodsItemByID(Integer gid);

	
	/**
	 * 获取销量
	 * @param gid
	 * @return
	 */
	public Integer findSaleByID(Integer gid);
	/**
	 * 获取评价评价
	 * @param gid
	 * @return
	 */
	public Double findGradeByID(Integer gid);
	/**
	 * 按照筛选条件获取商品列表,筛选条件为null即是查询所有
	 * 
	 * @param example
	 *            筛选条件
	 * @return 筛选商品列表页面
	 */
	public PageInfo<GoodsItem> findPageByExample(GoodsItemExample example);
	
	/**
	 * 通过组Id查询商品 
	 * @return 筛选商品列表页面
	 */
	public PageInfo<GoodsItem> findPageByGroupId(Integer groupId,QueryHandler qh);

	/**
	 * 按照筛选条件获取前台商品列表(状态库存要合法 加了条件),筛选条件为null即是查询所有
	 * 
	 * @param example
	 *            筛选条件
	 * @return 筛选商品列表页面
	 */
	public PageInfo<GoodsItem> findPageByExampleForIndex(
			GoodsItemExample example);
	
	/**
	 * 带条件筛选,使用QueryHandler 
	 * @param qh
	 *            筛选条件控制器
	 * @return 筛选商品列表页面
	 */
	public PageInfo<GoodsItem> findPageByQueryHandler(
			QueryHandler qh);
	/**
	 * 带条件筛选并按销量排序
	 * @param qh
	 *            筛选条件控制器
	 * @return 筛选商品列表页面
	 */
	public PageInfo<GoodsItem> findPageOrderBySUM(
			QueryHandler qh);
	
	/**
	 *  带条件筛选并评价分数排序
	 * @param qh
	 *            筛选条件控制器
	 * @return 筛选商品列表页面
	 */
	public PageInfo<GoodsItem> findPageOrderByGrade(
			QueryHandler qh);

	/**
	 *  带条件筛选并上架 时间排序
	 * @param qh
	 *            筛选条件控制器
	 * @return 筛选商品列表页面
	 */
	public PageInfo<GoodsItem> findPageOrderBySelveDate(
			QueryHandler qh);
	/**
	 *  带条件筛选并上架 没有分类的商品
	 * @param qh
	 *            筛选条件控制器
	 * @return 筛选商品列表页面
	 */
	public PageInfo<GoodsItem> findPageWithNoGroupShip(
			QueryHandler qh);
	
	/**
	 * 删除商品库存信息服务(暂时不实现,使用改变状态码形式下架商品)
	 * 
	 * @param gid
	 *            商品id
	 * @return 操作结果
	 * @deprecated
	 */
	public boolean delGoods(Integer gid);
}
